import React from "react";
import set from "lodash/set";
import { Input } from "antd";
import { useFormField } from "../../context/form-context";
import { useForm } from "../../context/metadata-context";
import { getQuery, parseToArray } from "../../../common/utils"

import SelectOrg from "../../../../RuntimeForm/SelectOrg/SelectOrg";
import { useInject } from "../../context/inject-context";

let defaultConfig = {
  //这一批属性来源 tplData.form.data_control （步骤权限）
  // "code": "a10",
  // "name": "选组织-项目-可编辑",
  // "type": "select_org",
  // "is_show": true,
  // "is_editable": true,
  // "is_required": false,

  //这一批属性来源 tplData.form.form_meta_data （表单设计器）
  // "isUsed": false,
  // "designProps": {
  //   "code": "a10",
  //   "name": "选组织-项目-可编辑",
  //   "ui": "wfd_org",
  //   "title": "选组织-项目-可编辑",
  //   "layout": "control_layout_leftRight",
  //   "defaultValue": "",
  //   "text": "请选择选组织-项目-可编辑",
  //   "groupTitle": "",
  //   "byTableGroupTitle": false,
  //   "tipstext": "",
  //   "type": "select_org",
  //   "title_w": 85
  // },
  
  //这一批属性来源 tplData.form.data_define （业务对象）
  // "show_type": "",
  // "show_type_name": "",
  // "props": {
  //     "source_type": "fixd_value",
  //     "multiple": 1,
  //     "onlyend": 1,
  //     "filter": "project",
  //     "configs": "ALL"
  // },
  // "type_name": "组织选择",
  // "isHide": false,
  // "is_sys": 0,
  // "default_value": "",
  
  //来源 tplData.form.defaultValueConf
  // "default": null
}

export default function ({ id, field, label, rules, showLabel = false, onChange, onBlur, displayFormatter, valueFormatter, required, cell, rowIndex, ...others }) {
  
  const injectInfo = useInject();
  if (injectInfo?.isDefaultRequired === true) {
    rules = [{
        validator(rule, value, callback) {
            if(value === '[]' || value === undefined || value === null || value === ""){//当前值为空数组时，触发校验
                return false;
            }
            return true;
        }
    }];//选组织组件需要自定义必填校验
  }
  
  const { input: fieldConfig, property, validation, readonly, className, isDisplay } = useFormField({
    field,
    rules,
    onChange,
    displayFormatter,
    valueFormatter,
    onBlur,
  });
  
  const { data: tplData, urlPrefix, params, csrfToken } = useForm().root;

  let defaultValue = fieldConfig.value;
  if(defaultValue === undefined || defaultValue === null || typeof(defaultValue) !== "string"){//字段值容错处理
    console.warn("字段 ‘" + cell.name + "’ 的值有误，重置为空数组，错误值：", defaultValue);
    if(Array.isArray(defaultValue)){//如果默认值是数组
      fieldConfig.onChange(JSON.stringify(defaultValue));
      return null;
    }else{//其他情况转为空数组（比如对象类型，会导致组件出错）
      defaultValue = [];
    }
  }else{
    defaultValue = parseToArray(defaultValue);//转为数组
  }

  if (isDisplay) {
    //返回实际显示的文本
    function getDataText(value) {
      if (value && Array.isArray(value)) {
        var txts = [];
        value.forEach(function (item) {
          txts.push(item.org_name);
        });
        return txts.join(",");
      } else {
        return "";
      }
    }
    return getDataText(defaultValue);
  }
  //编辑模式

  let component = <SelectOrg
                        className={className}
                        urlPrefix={urlPrefix}
                        placeholder={cell?.designProps?.text? cell?.designProps?.text:"请选择"}
                        onChange={(data)=>{
                            fieldConfig.onChange(JSON.stringify(data));
                            fieldConfig.onBlur(JSON.stringify(data));
                        }}
                        multiSelect={cell?.props?.multiple === 1 ? true : false}
                        filter={cell?.props?.filter || ""}//组织范围 公司或者全部
                        onlyend={cell?.props?.onlyend || 0}//仅选择末级组织
                        source_type={cell?.props?.source_type || ""}//数据源类型
                        configs={cell.props.configs || ""}//sql数据源
                        classify_id={params?.package?.classify_id || ""}
                        package_id={params?.package_id || getQuery().package_id || ""}
                        business_id={params?.business_id || getQuery().business_id || ""}
                        textField={"org_name"}
                        valueField={"org_id"}
                        titleField={"org_path"}
                        value={defaultValue}
                        title={cell.name}
                    ></SelectOrg>
  return component;
}
